home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
taropyon
/
hewin
/
ccisrc
/
install.cci
< prev
next >
Wrap
Text File
|
1993-11-30
|
10KB
|
389 lines
/*************************************************************************
* HEwin installer
*************************************************************************/
#include "ccilib.h"
/* パレットデータ */
char PltDat[3][16] =
{
/* G R B */
{ 0, 0, 0}, /* C_BALCK */
{ 0, 0, 0}, /* C_BLUE or C_THROUGH */
{ 7, 7, 8}, /* C_RED */
{12,12,13}, /* C_MAGENTA */
{ 6, 5, 7}, /* C_GREEN */
{ 8, 7, 9}, /* C_CYAN */
{10, 9,11}, /* C_YELLOW */
{11,11,12}, /* C_WHITE */
{ 5, 5, 6}, /* C_HBALCK */
{ 0, 0,11}, /* C_HBLUE */
{ 0,11, 0}, /* C_HRED */
{ 0,11,11}, /* C_HMAGENTA */
{11, 0, 0}, /* C_HGEEN */
{11, 0,11}, /* C_HCYAN */
{11,11, 0}, /* C_HYELLOW */
{14,14,15} /* C_HWHITE */
};
/*************************************************************************
* 初期化
*************************************************************************/
int init()
{
int i;
DSP_sysInit(0); /* 表示システム初期化 */
KBF_sysInit(); /* キーボードシステム初期化 */
KBF_kan_off();
FDL_sysInit(); /* ファイルダイアログ初期化 */
sdk_control(0); /* サイドワーク起動禁止 */
for ( i = 0; i < 2; ++i )
{
DSP_writePage(i);
DSP_setPlt( PltDat ); /* パレット設定 */
}
DSP_writePage(1);
DSP_title("INSTALL","0.99",15,7,0,0);
evt_setDspTime( 1, 432, 4, 7, 0 ); /* 時刻表示アイドリング処理設定 */
SYL_clear();
}
/*************************************************************************
* 終了
*************************************************************************/
int term()
{
FDL_sysEnd();
KBF_sysEnd();
DSP_sysEnd();
}
char StartPath[256];
char ItmPath[256]; /* アイテムファイル */
char *File1[11] = /* インストールするファイル */
{
"hewin.exp",
"*.dll",
"hewin.cci",
"hewin.icn",
"hewin.tif",
"tdptmp.tbl",
"hewin.ggg",
"*.doc",
"*.hlp",
"makecci.bat",
NULL
};
char *File2[5] = /* インストールするファイル(EXP) */
{
"cci.exp",
"lhx.exp",
"rz.exp",
"sz.exp",
NULL
};
char *File3[4] = /* インストールするファイル(CCI) */
{
"cpp.exe",
"*.h",
"*.cci",
NULL
};
#define FRM_X1(_frm) _frm[0]
#define FRM_Y1(_frm) _frm[1]
#define FRM_X2(_frm) _frm[2]
#define FRM_Y2(_frm) _frm[3]
int item_set_newpos( short *newfrm )
{
int ret;
int fpos, nextFPos;
int etyNum;
short icnNum;
char ttlStr[128];
char pathStr[128];
char paraStr[128];
int atrInf;
int nextFPos;
short frm[4];
fpos = 0;
FRM_X1(newfrm) = 0;
FRM_Y1(newfrm) = 0;
FRM_X2(newfrm) = 0;
FRM_Y2(newfrm) = 0;
while ( (fpos = ITM_GetPhysclNextFPos( ItmPath, fpos )) > 0 )
{
if ( ITM_GetStair( ItmPath, fpos ) == 0 )
{ /* ルートのみ */
ret = ITM_GetItmType(ItmPath,fpos);
switch ( ret )
{
case 1: /* group */
ITM_GetGrpData(ItmPath,fpos,&etyNum,&icnNum,ttlStr,&nextFPos,frm);
break;
case 2: /* apllication */
ITM_GetAplData(ItmPath,fpos,&icnNum,ttlStr,pathStr,paraStr,atrInf,frm);
break;
}
if ( FRM_X1(newfrm) < FRM_X2(frm) )
FRM_X1(newfrm) = FRM_X2(frm);
if ( FRM_Y1(newfrm) < FRM_Y2(frm) )
FRM_Y1(newfrm) = FRM_Y2(frm);
}
}
FRM_Y1(newfrm) = FRM_Y1(newfrm) + 15;
FRM_X2(newfrm) = FRM_X1(newfrm) + 24;
FRM_Y2(newfrm) = FRM_Y1(newfrm) + 24;
if ( FRM_X2(newfrm) > 621 )
{
FRM_X2(newfrm) = 621;
FRM_X1(newfrm) = FRM_X2(newfrm) - 24;
}
if ( FRM_Y2(newfrm) > 410 )
{
FRM_Y2(newfrm) = 410;
FRM_Y1(newfrm) = FRM_Y2(newfrm) - 24;
}
}
/*************************************************************************
* インストール
*************************************************************************/
int install()
{
int i, ret, len;
char *btn;
char *fdl;
int drv;
char *p, tmp[256], path[256], ccipath[256], whare[256], src[256], prog[256];
short frm[4];
_RETRY:
DSP_writePage(1);
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "INSTALL : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT, 2, btn,
" HEwin のインストールを行いますか? ");
MNU_freeBtn( btn );
if ( ret != 1 )
return (0);
DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
3, "\n インストール先に移動してください。 \n" );
/* インストール */
if ( (fdl = FDL_open(0)) == NULL )
return (-1);
FDL_set_title( fdl,"インストール先指定");
FDL_set_wildcard( fdl, "*.*");
ret = FDL_start(fdl);
if ( ret == NORMAL )
{
drv = FDL_get_drv(fdl);
strcpy( whare, FDL_get_whare(fdl) );
}
FDL_close(fdl);
if ( ret )
goto _RETRY;
sprintf( tmp, "%c:/%s", drv+'A', whare );
len = strlen(tmp);
if ( len > 0 && tmp[len-1] != '/' && tmp[len-1] != '\\' )
{
tmp[len++] = '/';
tmp[len] = '\0';
}
sprintf( path, "%sHEWIN", tmp);
ret = FS_isFileExist(path);
if ( ret == 0 )
{ /* ファイルは存在しない */
/* ディレクトリ作成確認 */
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "MKDIR : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
" インストール先にディレクトリを作成します。 \n%s", path );
MNU_freeBtn( btn );
if ( ret != 1 )
goto _RETRY;
FS_mkdir(path);
} else if ( ret == 1 )
{ /* ファイルが存在 */
MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
" %s \n インストール先に同名のファイルが存在しています。 ", path );
goto _RETRY;
}
/* インストール先確認 */
btn = MNU_allocBtn( 2 );
MNU_setBtn( btn, 0, '\r' , KA_EXEC , 1, "INSTALL : [実行]" );
MNU_setBtn( btn, 1, '\x1B', KA_CANCEL, 2, "CANECEL : [取消]" );
ret = MNU_selectBtn( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER, 2, btn,
" インストール先 : %s \n インストールを行いますか? ", path );
MNU_freeBtn( btn );
if ( ret != 1 )
goto _RETRY;
/* 複写元にカレントを移動 */
sprintf( tmp, "%s.", StartPath );
FS_chdrv( toupper(StartPath[0]) - 'A' );
FS_chdir( tmp );
/* HEwin 本体及び関連ファイル */
ret = i = 0;
while ( (p = File1[i++]) != NULL && ret == 0 )
{
SYL_puts( C_INFO, "copy %s", p );
ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
}
if ( drv > 1 && ret == NORMAL )
{ /* 外部ユーティリティ */
ret = i = 0;
while ( (p = File2[i++]) != NULL && ret == 0 )
{
SYL_puts( C_INFO, "copy %s", p );
if ( FS_isFileExist(p) == 0 )
continue;
ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, path, "" );
}
}
if ( drv > 1 && ret == NORMAL )
{ /* CCI */
/* 複写元にカレントを移動 */
sprintf( tmp, "%sCCISRC", StartPath );
FS_chdrv( toupper(StartPath[0]) - 'A' );
FS_chdir( tmp );
sprintf( ccipath, "%s/CCISRC", path );
if ( (ret = FS_isFileExist(tmp)) == 0 )
{
FS_mkdir(ccipath);
} else if ( ret == 1 )
{
MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
" %s \n インストール先に同名のファイルが存在しています。 ", ccipath );
goto _RETRY;
}
ret = i = 0;
while ( (p = File3[i++]) != NULL && ret == 0 )
{
SYL_puts( C_INFO, "copy %s", p );
ret = FM_fcopy( p, 0x00, FCOPY_OVERWRITE_CHECK|FCOPY_LAST_MSG_IGN, ccipath, "" );
}
}
if ( ret )
{ /* error */
MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY), SELBTN_ATT_CENTER,
"FILE COPY ERROR\n インストールに失敗しました。 " );
return (-1);
}
/* アイテム登録 */
SYL_puts( C_INFO, "アイテム登録" );
sprintf( ItmPath, "%c:\\tmenu.itm", drv+'A');
if ( FS_isFileExist(ItmPath) == 0 )
{ /* アイテムファイルま作成 */
ITM_CreateItemFile(ItmPath);
}
item_set_newpos( frm );
ret = MNU_sure( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_CENTER,
" item file %s \n アイテム登録を行います。 ", ItmPath );
if ( ret == 0 )
{
sprintf( tmp, "%s/%s", path, File1[0]);
FS_unix2dos( prog, tmp+2 );
FS_strupr( prog ); /* 大文字に変換 */
ITM_AddAplItem( ItmPath, 0, 1024, "HEwin", prog, "", 2, frm );
}
SYL_puts( C_INFO, "***** Completed *****");
DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
3, " インストール終了しました。 " );
return (0);
}
char *ScnMsg[8] =
{
" このプログラムはHEwin をインストールすめためのプログラムです。",
" 関連ファイルをフロッピィディスクやハードディスクに複写して、",
" HEwin が使える状態に準備します。",
"",
" ディスク容量の関係から、フロッピィディスクにはすべてのファイルは ",
" 複写できません(必要最小限のファイルのみが複写されます)。",
NULL
};
/*************************************************************************
* 画面
*************************************************************************/
int dsp_init()
{
int i, len, x, y;
char *p;
DSP_writePage(0);
DSP_boxf(0,24,639,463,PSET,COLMIX(5,6));
i = 0;
while ( (p = ScnMsg[i++]) != NULL )
{
len = strlen(p);
x = (640 - len * 8)/2;
y = 32 + (i * 18);
DSP_str(x,y,C_MBLACK,5,16,p);
}
}
/*************************************************************************
* MAIN
*************************************************************************/
int main( int argc, char **argv )
{
char tmp[256];
init();
dsp_init();
FS_setFullPathname( tmp, argv[0] );
FS_getDnam( StartPath, tmp );
install();
term();
return (0);
}